Components and supplies
IMU Sensor
GPS/GLONASS
Iskra Nano Pro
Arduino Mega 2560
Tools and machines
Hot glue gun (generic)
Soldering iron (generic)
Drill, Screwdriver
Project description
Code
UartAndPinConfig.h
arduino
1#include "Arduino.h" 2 3#define SetBit(reg, bita) reg |= (1<<bita) 4#define ClearBit(reg, bita) reg &= (~(1<<bita)) 5#define InvBit(reg, bita) reg ^= (1<<bita) 6#define BitIsSet(reg, bita) ((reg & (1<<bita)) != 0) 7#define BitIsClear(reg, bita) ((reg & (1<<bita)) == 0) 8 9// Arduino Duemilanove, Diecimila, and NG 10#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) 11 12#define LedPinOut() DDRB |= (1<<5) 13#define LedPinOn() PORTB |= (1<<5) 14#define LedPinOFF() PORTB &= (~(1<<5)) 15 16// Arduino Mega 17#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) 18 19#define LedPinOut() DDRB |= (1<<7) 20#define LedPinOn() PORTB |= (1<<7) 21#define LedPinOFF() PORTB &= (~(1<<7)) 22 23// Leonardo 24#elif defined(__AVR_ATmega32U4__) 25 26#define LedPinOut() DDRC |= (1<<7) 27#define LedPinOn() PORTC |= (1<<7) 28#define LedPinOFF() PORTC &= (~(1<<7)) 29 30// anything else 31#else 32#error "Board not supported" 33#endif 34 35#if defined(Serial_0) //UART0 36 37#if defined(UBRRH) && defined(UBRRL) 38 #define UDRn UDR 39 #define UBRRnH UBRRH 40 #define UBRRnL UBRRL 41 #define UCSRnA UCSRA 42 #define UCSRnB UCSRB 43 #define UCSRnC UCSRC 44#else 45 #define UDRn UDR0 46 #define UBRRnH UBRR0H 47 #define UBRRnL UBRR0L 48 #define UCSRnA UCSR0A 49 #define UCSRnB UCSR0B 50 #define UCSRnC UCSR0C 51#endif 52 53#if defined(USART_RX_vect) 54 #define BYTEin USART_RX_vect 55#elif defined(USART0_RX_vect) 56 #define BYTEin USART0_RX_vect 57#elif defined(USART_RXC_vect) 58 #define BYTEin USART_RXC_vect //ATmega8 59#else 60 #error "Board not supported" 61#endif 62 63#endif //UART0 64 65 66#if defined(Serial_1) //UART1 67 68 #define UDRn UDR1 69 #define UBRRnH UBRR1H 70 #define UBRRnL UBRR1L 71 #define UCSRnA UCSR1A 72 #define UCSRnB UCSR1B 73 #define UCSRnC UCSR1C 74 75 #if defined(UART1_RX_vect) 76 #define BYTEin UART1_RX_vect 77 #elif defined(USART1_RX_vect) 78 #define BYTEin USART1_RX_vect 79 #else 80 #error "Board not supported" 81 #endif 82 83#endif //UART1 84 85 86#if defined(Serial_2) //UART2 87 88 #define UDRn UDR2 89 #define UBRRnH UBRR2H 90 #define UBRRnL UBRR2L 91 #define UCSRnA UCSR2A 92 #define UCSRnB UCSR2B 93 #define UCSRnC UCSR2C 94 #define BYTEin USART2_RX_vect 95 96#endif //UART2 97 98 99#if defined(Serial_3) //UART3 100 101 #define UDRn UDR3 102 #define UBRRnH UBRR3H 103 #define UBRRnL UBRR3L 104 #define UCSRnA UCSR3A 105 #define UCSRnB UCSR3B 106 #define UCSRnC UCSR3C 107 #define BYTEin USART3_RX_vect 108 109#endif //UART3 110 111#if !defined(TXC0) 112#if defined(TXC) 113// Some chips like ATmega8 don't have UPE, only PE. The other bits are 114// named as expected. 115#if !defined(UPE) && defined(PE) 116#define UPE PE 117#endif 118// On ATmega8, the uart and its bits are not numbered, so there is no TXC0 etc. 119#define TXC0 TXC 120#define RXEN0 RXEN 121#define TXEN0 TXEN 122#define RXCIE0 RXCIE 123#define UDRIE0 UDRIE 124#define U2X0 U2X 125#define UPE0 UPE 126#define UDRE0 UDRE 127#elif defined(TXC1) 128// Some devices have uart1 but no uart0 129#define TXC0 TXC1 130#define RXEN0 RXEN1 131#define TXEN0 TXEN1 132#define RXCIE0 RXCIE1 133#define UDRIE0 UDRIE1 134#define U2X0 U2X1 135#define UPE0 UPE1 136#define UDRE0 UDRE1 137#else 138#error No UART found in HardwareSerial.cpp 139#endif 140#endif // !defined TXC0 141 142
Serial27bTransmitter.h
arduino
1#include "Arduino.h" 2#include "UartAndPinConfig.h" 3 4const uint8_t transmStart = 129; // 5const uint8_t transmEnd = 130; // 6 7const uint8_t receiverStart =254; // 8const uint8_t receiverEnd = 255; // 9 10// 11volatile uint32_t Serial34bSendTimeOUT; 12// 13volatile uint32_t Serial34bTimeCore = 0; 14// true / false 15volatile boolean tTimeOut = true; 16// 17volatile uint8_t tErrTime = 0; 18// 19volatile uint8_t tErrCRC = 0; 20// 21volatile uint8_t BYTEinCount = 0; 22// 23volatile uint8_t inUart_arr[32]; 24 25ISR (TIMER0_COMPA_vect) { 26Serial34bTimeCore ++; 27 28 if (Serial34bTimeCore > Serial34bSendTimeOUT) { // 29 Serial34bTimeCore = 0; 30 31 if (tTimeOut) { // / !!! 32 tTimeOut = false; 33 34// UART 35uint8_t uart_arr[32]; 36for (uint8_t i = 0; i <= 31; i++) uart_arr[i]=0; 37 38// b8_arr[28]; 39uint8_t b8_arr[28]; 40// 41b8_arr[0] = 0; 42for (uint8_t i = 1; i <= 27; i++) b8_arr[i] = transm_arr[i-1]; 43 44// 45int8_t uartCount = 0; 46for (uartCount = 27; uartCount >= 0; uartCount--) { 47 if (b8_arr[uartCount] != 0) break; // uartCount 48 } 49 50if (uartCount != -1) { // - 51// 52// 53uint16_t crc16 = 0; 54uint8_t crc8 = 0; 55for (uint8_t i = 1; i <= uartCount; i++) crc16 = crc16 + b8_arr[i] * 44111; 56crc8 = crc16 & 255; 57b8_arr[0] = crc8; 58 59 // 8- 7- 60 uint8_t k = 0; 61 uint8_t q = 1; 62 for (uint8_t j = 0; j <= 24; j=j+8) { // 0, 8, 16, 24 63 for (uint8_t i = k; i <= k+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 64 uart_arr[i+q] = b8_arr[i]; 65 uart_arr[i+q] &= B01111111; 66 b8_arr[i] &= B10000000; 67 uart_arr[j] |= b8_arr[i]; 68 uart_arr[j] >>= 1; 69 } // 0...6 / 7...13 /14...20 / 21...27 / 70 if (uartCount<j) break; // 71 uartCount ++; 72 k = k + 7; 73 q = q + 1; 74 } // 0, 8, 16, 24 75} // UART uart_arr[32] 76 77 // 78 while ( !( UCSRnA & (1<<UDRE0)) ); 79 UDRn = receiverStart; 80 // uart_arr[32] 81 for (int8_t i = 0; i <= uartCount; i++) { 82 while ( !( UCSRnA & (1<<UDRE0)) ); 83 UDRn = uart_arr[i]; 84 } 85 // 86 while ( !( UCSRnA & (1<<UDRE0)) ); 87 UDRn = receiverEnd; 88 89 } else { // transmTOUT = false; 90 // 91 tTimeOut = true; 92 // 93 tErrTime++; 94 // 95 LedPinOFF(); 96} 97 } // 98} // 99 100ISR (BYTEin) { 101 // !!! 102 uint8_t dat = 0; 103 dat = UDRn; 104 105 if (transmStart == dat){ // 106 BYTEinCount = 0; 107 for (uint8_t i = 0; i <= 31; i++) inUart_arr[i] = 0; // inUart_arr[32] 108 return; 109 } 110 111 if (transmEnd == dat){ // 112 113 if (BYTEinCount == 0) { // 114 for (uint8_t i = 0; i <= 26; i++) receiv_arr[i] = 0; // 115 Serial34bTimeCore = 0; // 116 LedPinOn(); // - 117 tTimeOut = true; // 118 return; 119 } else { 120 uint8_t b8_arr[28]; // 121 for (uint8_t i = 0; i <= 27; i++) b8_arr[i] = 0; // 122 123 // 124 uint8_t k = 0; 125 uint8_t q = 1; 126 for (uint8_t j = 0; j <= 27; j=j+7) { // 0, 7, 14, 31 127 for (uint8_t i = j; i <= j+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 128 b8_arr[i] = inUart_arr[k]; 129 b8_arr[i] <<= (7+j-i); 130 b8_arr[i] &= B10000000; 131 b8_arr[i] |= inUart_arr[i+q]; 132 } // 0...6 / 7...13 /14...20 / 21...27 / 133 k = k + 8; 134 q = q + 1; 135 } // 0, 7, 14, 31 136 // 137 138 // 139 uint16_t crc16 = 0; 140 for (int i = 1; i <= 27; i++) crc16 = crc16 + b8_arr[i] * 44111; 141 uint8_t crc8 = 0; 142 crc8 = crc16 & 255; 143 // 144 if (b8_arr[0] == crc8) { 145 // !!! 146 for (int i = 0; i <=26; i++) receiv_arr[i] = b8_arr[i+1]; 147 // 148 LedPinOn(); 149 // 150 Serial34bTimeCore = 0; 151 // 152 tTimeOut = true; 153 } else { 154 // 155 LedPinOFF(); 156 // 157 tErrCRC++; 158 } 159 } 160 return; 161 } 162 // 163 inUart_arr[BYTEinCount] = dat; 164 BYTEinCount++; 165} // - !!! 166 167void startTransmitter (uint32_t baudRate, uint32_t timeSend) { 168// !!! 169uint16_t ubrr = 0; 170if (baudRate == 115200) ubrr = 8; 171else ubrr = 16000000/16/baudRate-1; 172// !!! 173UBRRnH = (unsigned char)(ubrr>>8); 174UBRRnL = (unsigned char)ubrr; 175// 176SetBit(UCSRnB, TXEN0); 177// 178SetBit(UCSRnB, RXEN0); 179// 180SetBit(UCSRnB, RXCIE0); 181// 8 data 1 stop bit 182SetBit(UCSRnC, 1); 183SetBit(UCSRnC, 2); 184// 185Serial34bSendTimeOUT = timeSend; 186OCR0A = 0xA0; // 187SetBit(TIMSK0, OCIE0A); // 188// PIN 13 189LedPinOut(); 190// 191for (uint8_t i = 0; i <= 26; i++) transm_arr[i] = 0; 192for (uint8_t i = 0; i <= 26; i++) receiv_arr[i] = 0; 193}
Serial27bReceiver.h
arduino
1#include "Arduino.h" 2#include "UartAndPinConfig.h" 3 4const uint8_t transmStart = 129; // 5const uint8_t transmEnd = 130; // 6 7const uint8_t receiverStart =254; // 8const uint8_t receiverEnd = 255; // 9 10// 11volatile uint32_t Serial34bSendTimeOUT; 12// 13volatile uint32_t Serial34bTimeCore = 0; 14// - 15volatile boolean transmTOUT = true; 16// 17volatile uint8_t BYTEinCount = 0; 18// 19volatile uint8_t inUart_arr[32]; 20// 21volatile uint8_t rErrTime = 0; 22// 23volatile uint8_t rErrCRC = 0; 24 25 26ISR (TIMER0_COMPA_vect) { 27Serial34bTimeCore ++; 28if (Serial34bTimeCore > Serial34bSendTimeOUT) { // 29Serial34bTimeCore = 0; // 30LedPinOFF(); // - 31rErrTime ++; // 32} 33} 34 35ISR (BYTEin) { // 36 37 uint8_t dat = 0; // !!! 38 dat = UDRn; 39 40if (receiverStart == dat){ // 41 BYTEinCount = 0; 42 // inUart_arr[32] 43 for (uint8_t i = 0; i <= 31; i++) inUart_arr[i] = 0; 44 return; 45 } 46 47if (receiverEnd == dat){ 48 49 // 50 uint8_t b8_arr[28]; 51 // 52 for (uint8_t i = 0; i <= 27; i++) b8_arr[i] = 0; 53 54 // 55 uint8_t k = 0; 56 uint8_t q = 1; 57 for (uint8_t j = 0; j <= 27; j=j+7) { // 0, 7, 14, 31 58 59 for (uint8_t i = j; i <= j+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 60 b8_arr[i] = inUart_arr[k]; 61 b8_arr[i] <<= (7+j-i); 62 b8_arr[i] &= B10000000; 63 b8_arr[i] |= inUart_arr[i+q]; 64 } // 0...6 / 7...13 /14...20 / 21...27 / 65 k = k + 8; 66 q = q + 1; 67 } // 0, 7, 14, 31 68 // 69 70 // 71 uint16_t crc16 = 0; 72 for (int i = 1; i <= 27; i++) crc16 = crc16 + b8_arr[i] * 44111; 73 uint8_t crc8 = 0; 74 crc8 = crc16 & 255; 75 // 76 if (b8_arr[0] == crc8) { 77 // !!! 78 for (int i = 0; i <=26; i++) transm_arr[i] = b8_arr[i+1]; 79 // 80 LedPinOn(); 81 // 82 Serial34bTimeCore = 0; 83 } else { 84 // 85 LedPinOFF(); 86 // 87 rErrCRC++; 88 } 89 90 // receiv_arr [27] !!!! 91 92 // UART 93 uint8_t uart_arr[32]; 94 for (uint8_t i = 0; i <= 31; i++) uart_arr[i]=0; 95 96 // b8_arr[28]; 97 b8_arr[0] = 0; 98 // 99 for (uint8_t i = 1; i <= 27; i++) b8_arr[i] = receiv_arr[i-1]; 100 101 // 102 int8_t uartCount = 0; 103 for (uartCount = 27; uartCount >= 0; uartCount--) { 104 if (b8_arr[uartCount] != 0) break; // uartCount 105 } 106 107 if (uartCount != -1) { // - 108 // 109 // 110 crc16 = 0; 111 crc8 = 0; 112 for (uint8_t i = 1; i <= uartCount; i++) crc16 = crc16 + b8_arr[i] * 44111; 113 crc8 = crc16 & 255; 114 b8_arr[0] = crc8; 115 116 // 8- 7- 117 118 k = 0; 119 q = 1; 120 for (uint8_t j = 0; j <= 24; j=j+8) { // 0, 8, 16, 24 121 for (uint8_t i = k; i <= k+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 122 uart_arr[i+q] = b8_arr[i]; 123 uart_arr[i+q] &= B01111111; 124 b8_arr[i] &= B10000000; 125 uart_arr[j] |= b8_arr[i]; 126 uart_arr[j] >>= 1; 127 } // 0...6 / 7...13 /14...20 / 21...27 / 128 if (uartCount<j) break; // 129 uartCount ++; 130 k = k + 7; 131 q = q + 1; 132 } // 0, 8, 16, 24 133} // UART uart_arr[32] 134 135 // 136 while ( !( UCSRnA & (1<<UDRE0)) ); 137 UDRn = transmStart; 138 // uart_arr[32] 139 for (int8_t i = 0; i <= uartCount; i++) { 140 while ( !( UCSRnA & (1<<UDRE0)) ); 141 UDRn = uart_arr[i]; 142 } 143 // 144 while ( !( UCSRnA & (1<<UDRE0)) ); 145 UDRn = transmEnd; 146 147 return; 148} 149 // 150 inUart_arr[BYTEinCount] = dat; 151 BYTEinCount++; 152 153} // 154 155 156 157void startReceiver (uint32_t baudRate, uint32_t timeSend) { 158// !!! 159uint16_t ubrr = 0; 160if (baudRate == 115200) ubrr = 8; 161else ubrr = 16000000/16/baudRate-1; 162// !!! 163UBRRnH = (unsigned char)(ubrr>>8); 164UBRRnL = (unsigned char)ubrr; 165// 166SetBit(UCSRnB, TXEN0); 167// 168SetBit(UCSRnB, RXEN0); 169// 170SetBit(UCSRnB, RXCIE0); 171// 8 data 1 stop bit 172SetBit(UCSRnC, 1); 173SetBit(UCSRnC, 2); 174// 175Serial34bSendTimeOUT = timeSend; 176OCR0A = 0xA0; // 177SetBit(TIMSK0, OCIE0A); // 178// PIN 13 179LedPinOut(); 180// 181for (uint8_t i = 0; i <= 26; i++) transm_arr[i] = 0; 182for (uint8_t i = 0; i <= 26; i++) receiv_arr[i] = 0; 183} 184 185 186 187 188 189 190 191 192 193 194 195
rc_submarine_transmitter_v2.ino
arduino
1// I2C 2#include <Wire.h> 3// 4#include <Adafruit_INA219.h> 5// 6Adafruit_INA219 ina219; 7 8#include <LiquidCrystal.h> 9LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 10 11// UART 12#define Serial_2 13 14byte transm_arr[27]; // 15byte receiv_arr[27]; // 16 17// 18#include <Serial27bTransmitter.h> 19 20boolean backL = 0; // enable fix 21boolean backR = 0; // enable fix 22boolean frontL = 0; // enable fix 23boolean frontR = 0; // enable fix 24 25boolean RL3 = 0; // RL3 ~ 26boolean LL3 = 0; // LL3 ~ 27boolean RL2 = 0; // RL2 ~ airPump 28boolean LL2 = 0; // LL2 ~ airPump 29 30boolean RL3y = 0; // RL3 ~ 31boolean LL3y = 0; // LL3 ~ 32boolean RL2y = 0; // RL2 ~ airPump 33boolean LL2y = 0; // LL2 ~ airPump 34 35boolean key4 = 0; // KEY BC547B LED-LIGHT 36 37boolean fixEnaB = 0; // 38boolean fixEnaS = 0; // 39 40void setup() { 41 // , () 42 startTransmitter(9600, 200); 43 44 pinMode(42, INPUT_PULLUP); // 45 pinMode(36, INPUT_PULLUP); // 1 ULN2803 (1-2) enable 46 pinMode(37, INPUT_PULLUP); // 1 ULN2803 (3-4) enable 47 pinMode(38, INPUT_PULLUP); // 1 ULN2803 (5-6) enable 48 pinMode(39, INPUT_PULLUP); // 1 ULN2803 (7-8) enable 49 50 pinMode(40, INPUT_PULLUP); // autodiving 51 pinMode(25, INPUT_PULLUP); // autodiving cancel 52 53 pinMode(29, INPUT_PULLUP); // QE4 2 ULN2803 (1-2) // 54 pinMode(30, INPUT_PULLUP); // QG6 2 ULN2803 (5-6) // 55 pinMode(22, INPUT_PULLUP); // QF5 2 ULN2803 (3-4) // 56 pinMode(23, INPUT_PULLUP); // QH7 2 ULN2803 (7-8) // 57 58 pinMode(41, INPUT_PULLUP); // enable Fix Motor button 59 60 lcd.begin(20, 4); 61 62 // 63 ina219.begin(); 64 65 // RX/TX 66 pinMode(14, OUTPUT); digitalWrite(14, 1); 67 pinMode(15, OUTPUT); digitalWrite(15, 1); 68 pinMode(18, OUTPUT); digitalWrite(18, 1); 69 pinMode(19, OUTPUT); digitalWrite(19, 1); 70} 71 72void loop() { 73 74 // 75 if (digitalRead(41)) fixEnaB = false; 76 if (!digitalRead(41) && !fixEnaB) { 77 fixEnaS = !fixEnaS; 78 fixEnaB = true; 79 } 80 81 // fix 82 if (digitalRead(42)) key4 = false; 83 if (!digitalRead(42) && !key4) { 84 bitWrite(transm_arr[0], 0, !bitRead(transm_arr[0], 0)); 85 key4 = true; 86 } 87 // bitWrite(transm_arr[0], 0, !digitalRead(42)); no fix 88 89 // autodiving 90 if (!digitalRead(40)) { 91 bitWrite(transm_arr[0], 1, !digitalRead(40)); // no fix 92 transm_arr[5] = map(analogRead(A12), 0, 1023, 0, 255); 93 } else { 94 bitWrite(transm_arr[0], 1, 0); 95 transm_arr[5] = 0; 96 } 97 // autodiving cancel 98 bitWrite(transm_arr[0], 2, !digitalRead(25)); // no fix 99 100 if (digitalRead(36)) RL3 = false; 101 if (!digitalRead(36) && !RL3) { 102 RL3y = !RL3y; 103 RL3 = true; 104 } 105 //bitWrite(transm_arr[0], 4, !digitalRead(36)); nofix 106 107 if (digitalRead(37)) LL3 = false; 108 if (!digitalRead(37) && !LL3) { 109 LL3y = !LL3y; 110 LL3 = true; 111 } 112 //bitWrite(transm_arr[0], 5, !digitalRead(37)); nofix 113 114 if (digitalRead(38)) RL2 = false; 115 if (!digitalRead(38) && !RL2) { 116 RL2y = !RL2y; 117 RL2 = true; 118 } 119 // bitWrite(transm_arr[0], 6, !digitalRead(38)); nofix 120 121 if (digitalRead(39)) LL2 = false; 122 if (!digitalRead(39) && !LL2) { 123 LL2y = !LL2y; 124 LL2 = true; 125 } 126 127 // 128 if (RL3y) transm_arr[1] = map(analogRead(A8), 0, 1023, 0, 255); else transm_arr[1] = 0; // RL3 ~ 129 if (LL3y) transm_arr[2] = map(analogRead(A9), 0, 1023, 0, 255); else transm_arr[2] = 0; // LL3 ~ 130 if (RL2y) transm_arr[3] = map(analogRead(A10), 0, 1023, 0, 255); else transm_arr[3] = 0; // RL2 ~ airPump 131 if (LL2y) transm_arr[4] = map(analogRead(A11), 0, 1023, 0, 255); else transm_arr[4] = 0; // LL2 ~ airPump 132 133 // L293D pwm 134 uint16_t leftRES = analogRead(A14); 135 uint16_t righRES = analogRead(A15); 136 137 // EN2 138 uint8_t pwmL; 139 140 if (leftRES >= 563) { 141 // 142 pwmL = map(analogRead(A14), 563, 1023, 0, 127); 143 bitWrite(pwmL,7,1); 144 } else if (leftRES <= 460) { 145 // 146 pwmL = map(analogRead(A14), 460, 0, 0, 127); 147 } else { 148 // 149 pwmL = 0; 150 } 151 152 // EN1 153 uint8_t pwmR; 154 if (righRES >= 563) { 155 // 156 pwmR = map(analogRead(A15), 563, 1023, 0, 127); 157 bitWrite(pwmR,7,1); 158 } else if (righRES <= 460) { 159 // 160 pwmR = map(analogRead(A15), 460, 0, 0, 127); 161 } else { 162 // 163 pwmR = 0; 164 } 165 // 166 transm_arr[6] = pwmL; 167 transm_arr[7] = pwmR; 168 169 // PWM 170 if (fixEnaS) { 171 172 // 173 if (digitalRead(30)) backL = false; 174 if (!digitalRead(30) && !backL) { 175 bitWrite(transm_arr[0], 4, !bitRead(transm_arr[0], 4)); 176 backL = true; 177 } 178 179 // 180 if (digitalRead(23)) backR = false; 181 if (!digitalRead(23) && !backR) { 182 bitWrite(transm_arr[0], 5, !bitRead(transm_arr[0], 5)); 183 backR = true; 184 } 185 186 // 187 if (digitalRead(29)) frontL = false; 188 if (!digitalRead(29) && !frontL) { 189 bitWrite(transm_arr[0], 6, !bitRead(transm_arr[0], 6)); 190 frontL = true; 191 } 192 193 // 194 if (digitalRead(22)) frontR = false; 195 if (!digitalRead(22) && !frontR) { 196 bitWrite(transm_arr[0], 7, !bitRead(transm_arr[0], 7)); 197 frontR = true; 198 } 199 } else { 200 bitWrite(transm_arr[0], 4, !digitalRead(30)); 201 bitWrite(transm_arr[0], 5, !digitalRead(23)); 202 bitWrite(transm_arr[0], 6, !digitalRead(29)); 203 bitWrite(transm_arr[0], 7, !digitalRead(22)); 204 } 205 206 207 // 208 lcd.clear(); 209 210 lcd.setCursor(0, 0); 211 lcd.print(transm_arr[1]); 212 lcd.setCursor(0, 1); 213 lcd.print(transm_arr[2]); 214 lcd.setCursor(0, 2); 215 lcd.print(transm_arr[3]); 216 lcd.setCursor(0, 3); 217 lcd.print(transm_arr[4]); 218 219 lcd.setCursor(4, 0); 220 lcd.print('-'); 221 lcd.print(pwmL); 222 223 lcd.setCursor(4, 1); 224 lcd.print('-'); 225 lcd.print(pwmR); 226 227 lcd.setCursor(4, 2); 228 lcd.print("d-"); 229 lcd.print(bitRead(transm_arr[0], 1)); 230 231 lcd.setCursor(4, 3); 232 lcd.print(map(analogRead(A12), 0, 1023, 0, 255)); 233 234 // c pwm 235 lcd.setCursor(9, 0); 236 lcd.print(RL3y); 237 lcd.setCursor(9, 1); 238 lcd.print(LL3y); 239 lcd.setCursor(9, 2); 240 lcd.print(RL2y); 241 lcd.setCursor(9, 3); 242 lcd.print(LL2y); 243 244 // pwm 245 lcd.setCursor(18, 0); 246 lcd.print(bitRead(transm_arr[0], 6)); 247 lcd.print(bitRead(transm_arr[0], 7)); 248 lcd.setCursor(18, 1); 249 lcd.print(bitRead(transm_arr[0], 4)); 250 lcd.print(bitRead(transm_arr[0], 5)); 251 252 // 253 lcd.setCursor(15, 2); 254 lcd.print("rV"); 255 float ShowV = receiv_arr[0]; 256 ShowV = ShowV / 10; 257 lcd.print(ShowV, 1); 258 259 // 260 float busvoltage = 0; 261 // GND V- 262 busvoltage = ina219.getBusVoltage_V(); 263 lcd.setCursor(15, 3); 264 lcd.print("tV"); 265 lcd.print(busvoltage, 1); 266 267 // 268 lcd.setCursor(15, 0); 269 lcd.print(fixEnaS); 270 lcd.print(bitRead(transm_arr[0], 0)); 271 272 delay(100); 273} 274 275/* 276 277 0 278 Bit0 KEY BC547B LED-LIGHT // 42 279 1 74HC595 280 QA0 281 QB1 282 QC2 283 QD3 284 QE4 2 ULN2803 (1-2) 285 QF5 2 ULN2803 (3-4) 286 QG6 2 ULN2803 (5-6) 287 QH7 2 ULN2803 (7-8) 288 289*/ 290
Serial27bTransmitter.h
arduino
1#include "Arduino.h" 2#include "UartAndPinConfig.h" 3 4const uint8_t transmStart = 129; // 5const uint8_t transmEnd = 130; // 6 7const uint8_t receiverStart =254; // 8const uint8_t receiverEnd = 255; // 9 10// 11volatile uint32_t Serial34bSendTimeOUT; 12// 13volatile uint32_t Serial34bTimeCore = 0; 14// true / false 15volatile boolean tTimeOut = true; 16// 17volatile uint8_t tErrTime = 0; 18// 19volatile uint8_t tErrCRC = 0; 20// 21volatile uint8_t BYTEinCount = 0; 22// 23volatile uint8_t inUart_arr[32]; 24 25ISR (TIMER0_COMPA_vect) { 26Serial34bTimeCore ++; 27 28 if (Serial34bTimeCore > Serial34bSendTimeOUT) { // 29 Serial34bTimeCore = 0; 30 31 if (tTimeOut) { // / !!! 32 tTimeOut = false; 33 34// UART 35uint8_t uart_arr[32]; 36for (uint8_t i = 0; i <= 31; i++) uart_arr[i]=0; 37 38// b8_arr[28]; 39uint8_t b8_arr[28]; 40// 41b8_arr[0] = 0; 42for (uint8_t i = 1; i <= 27; i++) b8_arr[i] = transm_arr[i-1]; 43 44// 45int8_t uartCount = 0; 46for (uartCount = 27; uartCount >= 0; uartCount--) { 47 if (b8_arr[uartCount] != 0) break; // uartCount 48 } 49 50if (uartCount != -1) { // - 51// 52// 53uint16_t crc16 = 0; 54uint8_t crc8 = 0; 55for (uint8_t i = 1; i <= uartCount; i++) crc16 = crc16 + b8_arr[i] * 44111; 56crc8 = crc16 & 255; 57b8_arr[0] = crc8; 58 59 // 8- 7- 60 uint8_t k = 0; 61 uint8_t q = 1; 62 for (uint8_t j = 0; j <= 24; j=j+8) { // 0, 8, 16, 24 63 for (uint8_t i = k; i <= k+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 64 uart_arr[i+q] = b8_arr[i]; 65 uart_arr[i+q] &= B01111111; 66 b8_arr[i] &= B10000000; 67 uart_arr[j] |= b8_arr[i]; 68 uart_arr[j] >>= 1; 69 } // 0...6 / 7...13 /14...20 / 21...27 / 70 if (uartCount<j) break; // 71 uartCount ++; 72 k = k + 7; 73 q = q + 1; 74 } // 0, 8, 16, 24 75} // UART uart_arr[32] 76 77 // 78 while ( !( UCSRnA & (1<<UDRE0)) ); 79 UDRn = receiverStart; 80 // uart_arr[32] 81 for (int8_t i = 0; i <= uartCount; i++) { 82 while ( !( UCSRnA & (1<<UDRE0)) ); 83 UDRn = uart_arr[i]; 84 } 85 // 86 while ( !( UCSRnA & (1<<UDRE0)) ); 87 UDRn = receiverEnd; 88 89 } else { // transmTOUT = false; 90 // 91 tTimeOut = true; 92 // 93 tErrTime++; 94 // 95 LedPinOFF(); 96} 97 } // 98} // 99 100ISR (BYTEin) { 101 // !!! 102 uint8_t dat = 0; 103 dat = UDRn; 104 105 if (transmStart == dat){ // 106 BYTEinCount = 0; 107 for (uint8_t i = 0; i <= 31; i++) inUart_arr[i] = 0; // inUart_arr[32] 108 return; 109 } 110 111 if (transmEnd == dat){ // 112 113 if (BYTEinCount == 0) { // 114 for (uint8_t i = 0; i <= 26; i++) receiv_arr[i] = 0; // 115 Serial34bTimeCore = 0; // 116 LedPinOn(); // - 117 tTimeOut = true; // 118 return; 119 } else { 120 uint8_t b8_arr[28]; // 121 for (uint8_t i = 0; i <= 27; i++) b8_arr[i] = 0; // 122 123 // 124 uint8_t k = 0; 125 uint8_t q = 1; 126 for (uint8_t j = 0; j <= 27; j=j+7) { // 0, 7, 14, 31 127 for (uint8_t i = j; i <= j+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 128 b8_arr[i] = inUart_arr[k]; 129 b8_arr[i] <<= (7+j-i); 130 b8_arr[i] &= B10000000; 131 b8_arr[i] |= inUart_arr[i+q]; 132 } // 0...6 / 7...13 /14...20 / 21...27 / 133 k = k + 8; 134 q = q + 1; 135 } // 0, 7, 14, 31 136 // 137 138 // 139 uint16_t crc16 = 0; 140 for (int i = 1; i <= 27; i++) crc16 = crc16 + b8_arr[i] * 44111; 141 uint8_t crc8 = 0; 142 crc8 = crc16 & 255; 143 // 144 if (b8_arr[0] == crc8) { 145 // !!! 146 for (int i = 0; i <=26; i++) receiv_arr[i] = b8_arr[i+1]; 147 // 148 LedPinOn(); 149 // 150 Serial34bTimeCore = 0; 151 // 152 tTimeOut = true; 153 } else { 154 // 155 LedPinOFF(); 156 // 157 tErrCRC++; 158 } 159 } 160 return; 161 } 162 // 163 inUart_arr[BYTEinCount] = dat; 164 BYTEinCount++; 165} // - !!! 166 167void startTransmitter (uint32_t baudRate, uint32_t timeSend) { 168// !!! 169uint16_t ubrr = 0; 170if (baudRate == 115200) ubrr = 8; 171else ubrr = 16000000/16/baudRate-1; 172// !!! 173UBRRnH = (unsigned char)(ubrr>>8); 174UBRRnL = (unsigned char)ubrr; 175// 176SetBit(UCSRnB, TXEN0); 177// 178SetBit(UCSRnB, RXEN0); 179// 180SetBit(UCSRnB, RXCIE0); 181// 8 data 1 stop bit 182SetBit(UCSRnC, 1); 183SetBit(UCSRnC, 2); 184// 185Serial34bSendTimeOUT = timeSend; 186OCR0A = 0xA0; // 187SetBit(TIMSK0, OCIE0A); // 188// PIN 13 189LedPinOut(); 190// 191for (uint8_t i = 0; i <= 26; i++) transm_arr[i] = 0; 192for (uint8_t i = 0; i <= 26; i++) receiv_arr[i] = 0; 193}
rc_submarine_receiver_v2.ino
arduino
1// I2C 2#include <Wire.h> 3// 4#include <Adafruit_INA219.h> 5// 6Adafruit_INA219 ina219; 7/*----------------------------------------------------*/ 8 9#define LL1 8 10#define RL1 7 11#define LL2 6 //~ 12#define RL2 5 //~ 13#define LL4 4 14#define LL3 3 //~ 15#define RL3 2 //~ 16#define RL4 21 17#define LED 20 18#define LMrev 16 19#define LMpwm 9 //~ 20#define RMrev 17 21#define RMpwm 10 //~ 22 23// UART ( ) 24#define Serial_0 25 26byte transm_arr[27]; // 27byte receiv_arr[27]; // 28 29// 30#include <Serial27bReceiver.h> 31 32long previousMillis = 0; 33long interval = 0; 34 35 36void setup() { 37 // , () 38 startReceiver(9600, 400); 39 // 40 ina219.begin(); 41 pinMode(LED, OUTPUT); // KEY BC547B LED-LIGHT 42 pinMode(LL1, OUTPUT); // LL1 BLesft 43 pinMode(RL1, OUTPUT); // RL1 RRight 44 pinMode(LL2, OUTPUT); // LL2 ~ airPump 45 pinMode(RL2, OUTPUT); // RL2 ~ airPump 46 pinMode(LL4, OUTPUT); // LL4 FLesft 47 pinMode(LL3, OUTPUT); // LL3 ~ 48 pinMode(RL3, OUTPUT); // RL3 ~ 49 pinMode(RL4, OUTPUT); // RL4 FRight 50 pinMode(LMrev, OUTPUT); // 51 pinMode(LMpwm, OUTPUT); // 52 pinMode(RMrev, OUTPUT); // 53 pinMode(RMpwm, OUTPUT); // 54} 55 56void loop() { 57 58 // 59 digitalWrite(LED, bitRead(transm_arr[0], 0)); 60 // 61 digitalWrite(LL1, bitRead(transm_arr[0], 4)); 62 digitalWrite(RL1, bitRead(transm_arr[0], 5)); 63 digitalWrite(LL4, bitRead(transm_arr[0], 6)); 64 digitalWrite(RL4, bitRead(transm_arr[0], 7)); 65 // 66 analogWrite(RL3, transm_arr[1]); // RL3 ~ 67 analogWrite(LL3, transm_arr[2]); // LL3 ~ 68 analogWrite(RL2, transm_arr[3]); // RL2 ~ airPump 69 analogWrite(LL2, transm_arr[4]); // LL2 ~ airPump 70 // , 71 digitalWrite(LMrev, bitRead(transm_arr[6], 7)); // 72 digitalWrite(RMrev, bitRead(transm_arr[7], 7)); // 73 uint8_t SpeedLM = transm_arr[6]; 74 uint8_t SpeedRM = transm_arr[7]; 75 bitClear(SpeedLM, 7); 76 bitClear(SpeedRM, 7); 77 analogWrite(LMpwm, map(SpeedLM, 0, 127, 0, 255)); 78 analogWrite(RMpwm, map(SpeedRM, 0, 127, 0, 255)); 79 // !!! 80 // INA219 81 float busvoltage = 0; 82 // GND V- 83 busvoltage = ina219.getBusVoltage_V() * 10; 84 busvoltage = round(busvoltage); 85 // 86 receiv_arr[0] = busvoltage; 87 if (digitalRead(13) == LOW) { 88 if (rErrTime > 1) { 89 transm_arr[0] = 1; 90 transm_arr[1] = 0; 91 transm_arr[2] = 0; 92 transm_arr[3] = 0; 93 transm_arr[4] = 0; 94 transm_arr[6] = 0; 95 transm_arr[7] = 0; 96 } 97 } else rErrTime =0; 98 // autodiving 99 if (bitRead(transm_arr[0],1)) { 100 interval = transm_arr[5] * 1000; 101 analogWrite(RL3, 255); // RL3 ~ 102 analogWrite(LL3, 255); // LL3 ~ 103 analogWrite(RL2, 255); // RL2 ~ airPump 104 analogWrite(LL2, 255); // LL2 ~ airPump 105 autodiving_label: 106 unsigned long currentMillis = millis(); 107 // , 108 if(currentMillis - previousMillis > interval) { 109 // 110 previousMillis = currentMillis; 111 } else { 112 // 113 if (bitRead(transm_arr[0],2)) interval=0; 114 goto autodiving_label; 115 } 116 } 117 delay(100); 118} 119
Serial27bReceiver.h
arduino
1#include "Arduino.h" 2#include "UartAndPinConfig.h" 3 4const uint8_t transmStart = 129; // 5const uint8_t transmEnd = 130; // 6 7const uint8_t receiverStart =254; // 8const uint8_t receiverEnd = 255; // 9 10// 11volatile uint32_t Serial34bSendTimeOUT; 12// 13volatile uint32_t Serial34bTimeCore = 0; 14// - 15volatile boolean transmTOUT = true; 16// 17volatile uint8_t BYTEinCount = 0; 18// 19volatile uint8_t inUart_arr[32]; 20// 21volatile uint8_t rErrTime = 0; 22// 23volatile uint8_t rErrCRC = 0; 24 25 26ISR (TIMER0_COMPA_vect) { 27Serial34bTimeCore ++; 28if (Serial34bTimeCore > Serial34bSendTimeOUT) { // 29Serial34bTimeCore = 0; // 30LedPinOFF(); // - 31rErrTime ++; // 32} 33} 34 35ISR (BYTEin) { // 36 37 uint8_t dat = 0; // !!! 38 dat = UDRn; 39 40if (receiverStart == dat){ // 41 BYTEinCount = 0; 42 // inUart_arr[32] 43 for (uint8_t i = 0; i <= 31; i++) inUart_arr[i] = 0; 44 return; 45 } 46 47if (receiverEnd == dat){ 48 49 // 50 uint8_t b8_arr[28]; 51 // 52 for (uint8_t i = 0; i <= 27; i++) b8_arr[i] = 0; 53 54 // 55 uint8_t k = 0; 56 uint8_t q = 1; 57 for (uint8_t j = 0; j <= 27; j=j+7) { // 0, 7, 14, 31 58 59 for (uint8_t i = j; i <= j+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 60 b8_arr[i] = inUart_arr[k]; 61 b8_arr[i] <<= (7+j-i); 62 b8_arr[i] &= B10000000; 63 b8_arr[i] |= inUart_arr[i+q]; 64 } // 0...6 / 7...13 /14...20 / 21...27 / 65 k = k + 8; 66 q = q + 1; 67 } // 0, 7, 14, 31 68 // 69 70 // 71 uint16_t crc16 = 0; 72 for (int i = 1; i <= 27; i++) crc16 = crc16 + b8_arr[i] * 44111; 73 uint8_t crc8 = 0; 74 crc8 = crc16 & 255; 75 // 76 if (b8_arr[0] == crc8) { 77 // !!! 78 for (int i = 0; i <=26; i++) transm_arr[i] = b8_arr[i+1]; 79 // 80 LedPinOn(); 81 // 82 Serial34bTimeCore = 0; 83 } else { 84 // 85 LedPinOFF(); 86 // 87 rErrCRC++; 88 } 89 90 // receiv_arr [27] !!!! 91 92 // UART 93 uint8_t uart_arr[32]; 94 for (uint8_t i = 0; i <= 31; i++) uart_arr[i]=0; 95 96 // b8_arr[28]; 97 b8_arr[0] = 0; 98 // 99 for (uint8_t i = 1; i <= 27; i++) b8_arr[i] = receiv_arr[i-1]; 100 101 // 102 int8_t uartCount = 0; 103 for (uartCount = 27; uartCount >= 0; uartCount--) { 104 if (b8_arr[uartCount] != 0) break; // uartCount 105 } 106 107 if (uartCount != -1) { // - 108 // 109 // 110 crc16 = 0; 111 crc8 = 0; 112 for (uint8_t i = 1; i <= uartCount; i++) crc16 = crc16 + b8_arr[i] * 44111; 113 crc8 = crc16 & 255; 114 b8_arr[0] = crc8; 115 116 // 8- 7- 117 118 k = 0; 119 q = 1; 120 for (uint8_t j = 0; j <= 24; j=j+8) { // 0, 8, 16, 24 121 for (uint8_t i = k; i <= k+6; i++) { // 0...6 / 7...13 /14...20 / 21...27 / 122 uart_arr[i+q] = b8_arr[i]; 123 uart_arr[i+q] &= B01111111; 124 b8_arr[i] &= B10000000; 125 uart_arr[j] |= b8_arr[i]; 126 uart_arr[j] >>= 1; 127 } // 0...6 / 7...13 /14...20 / 21...27 / 128 if (uartCount<j) break; // 129 uartCount ++; 130 k = k + 7; 131 q = q + 1; 132 } // 0, 8, 16, 24 133} // UART uart_arr[32] 134 135 // 136 while ( !( UCSRnA & (1<<UDRE0)) ); 137 UDRn = transmStart; 138 // uart_arr[32] 139 for (int8_t i = 0; i <= uartCount; i++) { 140 while ( !( UCSRnA & (1<<UDRE0)) ); 141 UDRn = uart_arr[i]; 142 } 143 // 144 while ( !( UCSRnA & (1<<UDRE0)) ); 145 UDRn = transmEnd; 146 147 return; 148} 149 // 150 inUart_arr[BYTEinCount] = dat; 151 BYTEinCount++; 152 153} // 154 155 156 157void startReceiver (uint32_t baudRate, uint32_t timeSend) { 158// !!! 159uint16_t ubrr = 0; 160if (baudRate == 115200) ubrr = 8; 161else ubrr = 16000000/16/baudRate-1; 162// !!! 163UBRRnH = (unsigned char)(ubrr>>8); 164UBRRnL = (unsigned char)ubrr; 165// 166SetBit(UCSRnB, TXEN0); 167// 168SetBit(UCSRnB, RXEN0); 169// 170SetBit(UCSRnB, RXCIE0); 171// 8 data 1 stop bit 172SetBit(UCSRnC, 1); 173SetBit(UCSRnC, 2); 174// 175Serial34bSendTimeOUT = timeSend; 176OCR0A = 0xA0; // 177SetBit(TIMSK0, OCIE0A); // 178// PIN 13 179LedPinOut(); 180// 181for (uint8_t i = 0; i <= 26; i++) transm_arr[i] = 0; 182for (uint8_t i = 0; i <= 26; i++) receiv_arr[i] = 0; 183} 184 185 186 187 188 189 190 191 192 193 194 195
rc_submarine_transmitter_v2.ino
arduino
1// I2C 2#include <Wire.h> 3// 4#include <Adafruit_INA219.h> 5// 6Adafruit_INA219 ina219; 7 8#include <LiquidCrystal.h> 9LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 10 11// UART 12#define Serial_2 13 14byte transm_arr[27]; // 15byte receiv_arr[27]; // 16 17// 18#include <Serial27bTransmitter.h> 19 20boolean backL = 0; // enable fix 21boolean backR = 0; // enable fix 22boolean frontL = 0; // enable fix 23boolean frontR = 0; // enable fix 24 25boolean RL3 = 0; // RL3 ~ 26boolean LL3 = 0; // LL3 ~ 27boolean RL2 = 0; // RL2 ~ airPump 28boolean LL2 = 0; // LL2 ~ airPump 29 30boolean RL3y = 0; // RL3 ~ 31boolean LL3y = 0; // LL3 ~ 32boolean RL2y = 0; // RL2 ~ airPump 33boolean LL2y = 0; // LL2 ~ airPump 34 35boolean key4 = 0; // KEY BC547B LED-LIGHT 36 37boolean fixEnaB = 0; // 38boolean fixEnaS = 0; // 39 40void setup() { 41 // , () 42 startTransmitter(9600, 200); 43 44 pinMode(42, INPUT_PULLUP); // 45 pinMode(36, INPUT_PULLUP); // 1 ULN2803 (1-2) enable 46 pinMode(37, INPUT_PULLUP); // 1 ULN2803 (3-4) enable 47 pinMode(38, INPUT_PULLUP); // 1 ULN2803 (5-6) enable 48 pinMode(39, INPUT_PULLUP); // 1 ULN2803 (7-8) enable 49 50 pinMode(40, INPUT_PULLUP); // autodiving 51 pinMode(25, INPUT_PULLUP); // autodiving cancel 52 53 pinMode(29, INPUT_PULLUP); // QE4 2 ULN2803 (1-2) // 54 pinMode(30, INPUT_PULLUP); // QG6 2 ULN2803 (5-6) // 55 pinMode(22, INPUT_PULLUP); // QF5 2 ULN2803 (3-4) // 56 pinMode(23, INPUT_PULLUP); // QH7 2 ULN2803 (7-8) // 57 58 pinMode(41, INPUT_PULLUP); // enable Fix Motor button 59 60 lcd.begin(20, 4); 61 62 // 63 ina219.begin(); 64 65 // RX/TX 66 pinMode(14, OUTPUT); digitalWrite(14, 1); 67 pinMode(15, OUTPUT); digitalWrite(15, 1); 68 pinMode(18, OUTPUT); digitalWrite(18, 1); 69 pinMode(19, OUTPUT); digitalWrite(19, 1); 70} 71 72void loop() { 73 74 // 75 if (digitalRead(41)) fixEnaB = false; 76 if (!digitalRead(41) && !fixEnaB) { 77 fixEnaS = !fixEnaS; 78 fixEnaB = true; 79 } 80 81 // fix 82 if (digitalRead(42)) key4 = false; 83 if (!digitalRead(42) && !key4) { 84 bitWrite(transm_arr[0], 0, !bitRead(transm_arr[0], 0)); 85 key4 = true; 86 } 87 // bitWrite(transm_arr[0], 0, !digitalRead(42)); no fix 88 89 // autodiving 90 if (!digitalRead(40)) { 91 bitWrite(transm_arr[0], 1, !digitalRead(40)); // no fix 92 transm_arr[5] = map(analogRead(A12), 0, 1023, 0, 255); 93 } else { 94 bitWrite(transm_arr[0], 1, 0); 95 transm_arr[5] = 0; 96 } 97 // autodiving cancel 98 bitWrite(transm_arr[0], 2, !digitalRead(25)); // no fix 99 100 if (digitalRead(36)) RL3 = false; 101 if (!digitalRead(36) && !RL3) { 102 RL3y = !RL3y; 103 RL3 = true; 104 } 105 //bitWrite(transm_arr[0], 4, !digitalRead(36)); nofix 106 107 if (digitalRead(37)) LL3 = false; 108 if (!digitalRead(37) && !LL3) { 109 LL3y = !LL3y; 110 LL3 = true; 111 } 112 //bitWrite(transm_arr[0], 5, !digitalRead(37)); nofix 113 114 if (digitalRead(38)) RL2 = false; 115 if (!digitalRead(38) && !RL2) { 116 RL2y = !RL2y; 117 RL2 = true; 118 } 119 // bitWrite(transm_arr[0], 6, !digitalRead(38)); nofix 120 121 if (digitalRead(39)) LL2 = false; 122 if (!digitalRead(39) && !LL2) { 123 LL2y = !LL2y; 124 LL2 = true; 125 } 126 127 // 128 if (RL3y) transm_arr[1] = map(analogRead(A8), 0, 1023, 0, 255); else transm_arr[1] = 0; // RL3 ~ 129 if (LL3y) transm_arr[2] = map(analogRead(A9), 0, 1023, 0, 255); else transm_arr[2] = 0; // LL3 ~ 130 if (RL2y) transm_arr[3] = map(analogRead(A10), 0, 1023, 0, 255); else transm_arr[3] = 0; // RL2 ~ airPump 131 if (LL2y) transm_arr[4] = map(analogRead(A11), 0, 1023, 0, 255); else transm_arr[4] = 0; // LL2 ~ airPump 132 133 // L293D pwm 134 uint16_t leftRES = analogRead(A14); 135 uint16_t righRES = analogRead(A15); 136 137 // EN2 138 uint8_t pwmL; 139 140 if (leftRES >= 563) { 141 // 142 pwmL = map(analogRead(A14), 563, 1023, 0, 127); 143 bitWrite(pwmL,7,1); 144 } else if (leftRES <= 460) { 145 // 146 pwmL = map(analogRead(A14), 460, 0, 0, 127); 147 } else { 148 // 149 pwmL = 0; 150 } 151 152 // EN1 153 uint8_t pwmR; 154 if (righRES >= 563) { 155 // 156 pwmR = map(analogRead(A15), 563, 1023, 0, 127); 157 bitWrite(pwmR,7,1); 158 } else if (righRES <= 460) { 159 // 160 pwmR = map(analogRead(A15), 460, 0, 0, 127); 161 } else { 162 // 163 pwmR = 0; 164 } 165 // 166 transm_arr[6] = pwmL; 167 transm_arr[7] = pwmR; 168 169 // PWM 170 if (fixEnaS) { 171 172 // 173 if (digitalRead(30)) backL = false; 174 if (!digitalRead(30) && !backL) { 175 bitWrite(transm_arr[0], 4, !bitRead(transm_arr[0], 4)); 176 backL = true; 177 } 178 179 // 180 if (digitalRead(23)) backR = false; 181 if (!digitalRead(23) && !backR) { 182 bitWrite(transm_arr[0], 5, !bitRead(transm_arr[0], 5)); 183 backR = true; 184 } 185 186 // 187 if (digitalRead(29)) frontL = false; 188 if (!digitalRead(29) && !frontL) { 189 bitWrite(transm_arr[0], 6, !bitRead(transm_arr[0], 6)); 190 frontL = true; 191 } 192 193 // 194 if (digitalRead(22)) frontR = false; 195 if (!digitalRead(22) && !frontR) { 196 bitWrite(transm_arr[0], 7, !bitRead(transm_arr[0], 7)); 197 frontR = true; 198 } 199 } else { 200 bitWrite(transm_arr[0], 4, !digitalRead(30)); 201 bitWrite(transm_arr[0], 5, !digitalRead(23)); 202 bitWrite(transm_arr[0], 6, !digitalRead(29)); 203 bitWrite(transm_arr[0], 7, !digitalRead(22)); 204 } 205 206 207 // 208 lcd.clear(); 209 210 lcd.setCursor(0, 0); 211 lcd.print(transm_arr[1]); 212 lcd.setCursor(0, 1); 213 lcd.print(transm_arr[2]); 214 lcd.setCursor(0, 2); 215 lcd.print(transm_arr[3]); 216 lcd.setCursor(0, 3); 217 lcd.print(transm_arr[4]); 218 219 lcd.setCursor(4, 0); 220 lcd.print('-'); 221 lcd.print(pwmL); 222 223 lcd.setCursor(4, 1); 224 lcd.print('-'); 225 lcd.print(pwmR); 226 227 lcd.setCursor(4, 2); 228 lcd.print("d-"); 229 lcd.print(bitRead(transm_arr[0], 1)); 230 231 lcd.setCursor(4, 3); 232 lcd.print(map(analogRead(A12), 0, 1023, 0, 255)); 233 234 // c pwm 235 lcd.setCursor(9, 0); 236 lcd.print(RL3y); 237 lcd.setCursor(9, 1); 238 lcd.print(LL3y); 239 lcd.setCursor(9, 2); 240 lcd.print(RL2y); 241 lcd.setCursor(9, 3); 242 lcd.print(LL2y); 243 244 // pwm 245 lcd.setCursor(18, 0); 246 lcd.print(bitRead(transm_arr[0], 6)); 247 lcd.print(bitRead(transm_arr[0], 7)); 248 lcd.setCursor(18, 1); 249 lcd.print(bitRead(transm_arr[0], 4)); 250 lcd.print(bitRead(transm_arr[0], 5)); 251 252 // 253 lcd.setCursor(15, 2); 254 lcd.print("rV"); 255 float ShowV = receiv_arr[0]; 256 ShowV = ShowV / 10; 257 lcd.print(ShowV, 1); 258 259 // 260 float busvoltage = 0; 261 // GND V- 262 busvoltage = ina219.getBusVoltage_V(); 263 lcd.setCursor(15, 3); 264 lcd.print("tV"); 265 lcd.print(busvoltage, 1); 266 267 // 268 lcd.setCursor(15, 0); 269 lcd.print(fixEnaS); 270 lcd.print(bitRead(transm_arr[0], 0)); 271 272 delay(100); 273} 274 275/* 276 277 0 278 Bit0 KEY BC547B LED-LIGHT // 42 279 1 74HC595 280 QA0 281 QB1 282 QC2 283 QD3 284 QE4 2 ULN2803 (1-2) 285 QF5 2 ULN2803 (3-4) 286 QG6 2 ULN2803 (5-6) 287 QH7 2 ULN2803 (7-8) 288 289*/ 290
rc_submarine_receiver_v2.ino
arduino
1// I2C 2#include <Wire.h> 3// 4#include <Adafruit_INA219.h> 5// 6 7Adafruit_INA219 ina219; 8/*----------------------------------------------------*/ 9 10#define 11 LL1 8 12#define RL1 7 13#define LL2 6 //~ 14#define RL2 5 //~ 15#define LL4 16 4 17#define LL3 3 //~ 18#define RL3 2 //~ 19#define RL4 21 20#define LED 20 21#define 22 LMrev 16 23#define LMpwm 9 //~ 24#define RMrev 17 25#define RMpwm 10 //~ 26 27// 28 UART ( ) 29#define Serial_0 30 31byte transm_arr[27]; // 32byte 33 receiv_arr[27]; // 34 35// 36#include <Serial27bReceiver.h> 37 38long 39 previousMillis = 0; 40long interval = 0; 41 42 43void setup() { 44 // , 45 () 46 startReceiver(9600, 400); 47 // 48 ina219.begin(); 49 pinMode(LED, 50 OUTPUT); // KEY BC547B LED-LIGHT 51 pinMode(LL1, OUTPUT); // LL1 BLesft 52 53 pinMode(RL1, OUTPUT); // RL1 RRight 54 pinMode(LL2, OUTPUT); // LL2 ~ airPump 55 56 pinMode(RL2, OUTPUT); // RL2 ~ airPump 57 pinMode(LL4, OUTPUT); // LL4 58 FLesft 59 pinMode(LL3, OUTPUT); // LL3 ~ 60 pinMode(RL3, OUTPUT); // RL3 61 ~ 62 pinMode(RL4, OUTPUT); // RL4 FRight 63 pinMode(LMrev, OUTPUT); // 64 65 pinMode(LMpwm, OUTPUT); // 66 pinMode(RMrev, OUTPUT); // 67 68 pinMode(RMpwm, OUTPUT); // 69} 70 71void loop() { 72 73 // 74 digitalWrite(LED, 75 bitRead(transm_arr[0], 0)); 76 // 77 digitalWrite(LL1, bitRead(transm_arr[0], 78 4)); 79 digitalWrite(RL1, bitRead(transm_arr[0], 5)); 80 digitalWrite(LL4, bitRead(transm_arr[0], 81 6)); 82 digitalWrite(RL4, bitRead(transm_arr[0], 7)); 83 // 84 analogWrite(RL3, 85 transm_arr[1]); // RL3 ~ 86 analogWrite(LL3, transm_arr[2]); // LL3 ~ 87 88 analogWrite(RL2, transm_arr[3]); // RL2 ~ airPump 89 analogWrite(LL2, transm_arr[4]); 90 // LL2 ~ airPump 91 // , 92 digitalWrite(LMrev, bitRead(transm_arr[6], 93 7)); // 94 digitalWrite(RMrev, bitRead(transm_arr[7], 7)); // 95 96 uint8_t SpeedLM = transm_arr[6]; 97 uint8_t SpeedRM = transm_arr[7]; 98 99 bitClear(SpeedLM, 7); 100 bitClear(SpeedRM, 7); 101 analogWrite(LMpwm, map(SpeedLM, 102 0, 127, 0, 255)); 103 analogWrite(RMpwm, map(SpeedRM, 0, 127, 0, 255)); 104 // 105 !!! 106 // INA219 107 float busvoltage = 0; 108 // GND V- 109 busvoltage 110 = ina219.getBusVoltage_V() * 10; 111 busvoltage = round(busvoltage); 112 // 113 114 receiv_arr[0] = busvoltage; 115 if (digitalRead(13) == LOW) { 116 if (rErrTime 117 > 1) { 118 transm_arr[0] = 1; 119 transm_arr[1] = 0; 120 transm_arr[2] 121 = 0; 122 transm_arr[3] = 0; 123 transm_arr[4] = 0; 124 transm_arr[6] = 125 0; 126 transm_arr[7] = 0; 127 } 128 } else rErrTime =0; 129 // autodiving 130 131 if (bitRead(transm_arr[0],1)) { 132 interval = transm_arr[5] * 1000; 133 134 analogWrite(RL3, 255); // RL3 ~ 135 analogWrite(LL3, 255); // LL3 ~ 136 analogWrite(RL2, 137 255); // RL2 ~ airPump 138 analogWrite(LL2, 255); // LL2 ~ airPump 139 autodiving_label: 140 141 unsigned long currentMillis = millis(); 142 // , 143 if(currentMillis 144 - previousMillis > interval) { 145 // 146 previousMillis = currentMillis; 147 148 } else { 149 // 150 if (bitRead(transm_arr[0],2)) interval=0; 151 152 goto autodiving_label; 153 } 154 } 155 delay(100); 156} 157
Downloadable files
rc submarine circuit diagram
rc submarine circuit diagram
rc submarine circuit diagram
rc submarine circuit diagram
Comments
Only logged in users can leave comments