Arduino初心者です。
ロボットのセンサーのサンプルプログラム(下記を参照してください。)で、
センサーが正常に動作しているのか確認したいのですが、
そもそも、Serial.printlnの内容がシリアルモニタ上文字化けを起こして表示されているため、
原因がわからず困っています。
ちなみに、
SONAR::initをコメント化すると、
loop関数内のSerial.printlnの内容は文字化けせずに表示されます。
センサーは、RS485から接続になります。
解消方法を教えてください。
Arduino
1#include <EEPROM.h> 2 3#include <MotorWheel.h> 4#include <Omni4WD.h> 5#include <PID_Beta6.h> 6#include <PinChangeInt.h> 7#include <PinChangeIntConfig.h> 8#include <SONAR.h> 9 10/* 11************************************************************************************ 12 Sonar:0x12 13 ------------------------------ 14 | | 15 M3| |M2 16 | | 17 | | 18 | | 19 Sonar:0x13| |Sonar:0x11 20 | | 21 | |Power Switch 22 | | 23 | | 24 ------------------------------- 25 | | 26 M4| |M1 27 | | 28 ------------------------------- 29 Sonar:0x14 30************************************************************************************ 31*/ 32 33 34irqISR(irq1,isr1); 35MotorWheel wheel1(3, 2, 4, 5, &irq1); 36 37irqISR(irq2,isr2); 38MotorWheel wheel2(11, 12, 14, 15, &irq2); 39 40irqISR(irq3,isr3); 41MotorWheel wheel3(9, 8, 16, 17, &irq3); 42 43irqISR(irq4,isr4); 44MotorWheel wheel4(10, 7, 18, 19, &irq4); 45 46Omni4WD Omni(&wheel1, &wheel2, &wheel3, &wheel4); 47 48SONAR sonar11(0x11),sonar12(0x12),sonar13(0x13),sonar14(0x14); 49 50unsigned short distBuf[4]; 51 52unsigned char sonarsUpdate() { 53 static unsigned char sonarCurr = 1; 54 if(sonarCurr==4) sonarCurr=1; 55 else ++sonarCurr; 56 if(sonarCurr==1) { 57 distBuf[1]=sonar12.getDist(); 58 sonar12.showDat(); 59 sonar12.trigger(); 60 } else if(sonarCurr==2) { 61 distBuf[2]=sonar13.getDist(); 62 sonar13.showDat(); 63 sonar13.trigger(); 64 } else if(sonarCurr==3){ 65 distBuf[3]=sonar14.getDist(); 66 sonar14.showDat(); 67 sonar14.trigger(); 68 } else { 69 distBuf[0]=sonar11.getDist(); 70 sonar11.showDat(); 71 sonar11.trigger(); 72 } 73 74 return sonarCurr; 75} 76 77void goAhead(unsigned int speedMMPS){ 78 if(Omni.getCarStat()!=Omni4WD::STAT_ADVANCE) Omni.setCarSlow2Stop(300); 79 Omni.setCarAdvance(0); 80 Omni.setCarSpeedMMPS(speedMMPS, 300); 81} 82 83void turnLeft(unsigned int speedMMPS){ 84 if(Omni.getCarStat()!=Omni4WD::STAT_LEFT) Omni.setCarSlow2Stop(300); 85 Omni.setCarLeft(0); 86 Omni.setCarSpeedMMPS(speedMMPS, 300); 87} 88 89void turnRight(unsigned int speedMMPS){ 90 if(Omni.getCarStat()!=Omni4WD::STAT_RIGHT) Omni.setCarSlow2Stop(300); 91 Omni.setCarRight(0); 92 Omni.setCarSpeedMMPS(speedMMPS, 300); 93} 94 95void rotateRight(unsigned int speedMMPS){ 96 if(Omni.getCarStat()!=Omni4WD::STAT_ROTATERIGHT) Omni.setCarSlow2Stop(300); 97 Omni.setCarRotateRight(0); 98 Omni.setCarSpeedMMPS(speedMMPS, 300); 99} 100 101void rotateLeft(unsigned int speedMMPS){ 102 if(Omni.getCarStat()!=Omni4WD::STAT_ROTATELEFT) Omni.setCarSlow2Stop(300); 103 Omni.setCarRotateLeft(0); 104 Omni.setCarSpeedMMPS(speedMMPS, 300); 105} 106 107void allStop(unsigned int speedMMPS){ 108 if(Omni.getCarStat()!=Omni4WD::STAT_STOP) Omni.setCarSlow2Stop(300); 109 Omni.setCarStop(); 110} 111 112void backOff(unsigned int speedMMPS){ 113 114} 115 116//void(*motion[8])(unsigned int speedMMPS) = {goAhead, turnLeft, rotateRight, rotateLeft, 117 //turnRight, goAhead, rotateRight, backOff}; 118 119void(*motion[16])(unsigned int speedMMPS) = {goAhead, turnRight, goAhead, turnRight, 120 turnLeft, goAhead, turnLeft, goAhead, 121 rotateRight, rotateRight, turnRight, turnRight, 122 rotateLeft, backOff, turnLeft, allStop}; 123 124unsigned long currMillis=0; 125void demoWithSensors(unsigned int speedMMPS,unsigned int distance) { 126 unsigned char sonarcurrent = 0; 127 if(millis()-currMillis>SONAR::duration + 20) { 128 currMillis=millis(); 129 sonarcurrent = sonarsUpdate(); 130 } 131 //Serial.println(sonarcurrent); 132 133 if(sonarcurrent == 4){ 134 unsigned char bitmap = (distBuf[0] < distance); //right 135 bitmap |= (distBuf[1] < distance) << 1; // back 136 bitmap |= (distBuf[2] < distance) << 2; // left 137 bitmap |= (distBuf[3] < distance) << 3; // front 138 139 (*motion[bitmap])(speedMMPS); 140 } 141 142 Omni.PIDRegulate(); 143} 144 145void setup() { 146 Serial.begin(9600); //シリアル通信のレートを設定 147 delay(2000); 148 TCCR1B=TCCR1B&0xf8|0x01; // Pin9,Pin10 PWM 31250Hz 149 TCCR2B=TCCR2B&0xf8|0x01; // Pin3,Pin11 PWM 31250Hz 150 151 SONAR::init(13); 152 Omni.switchMotors(); 153 Omni.PIDEnable(0.35,0.02,0,10); 154} 155 156void loop() { 157 Serial.println(1); 158 //Omni.demoActions(160,5000,500,false); 159 //demoWithSensors(160,30); 160}
SONAR::initをコメント化したときのシリアルモニタ
Arduino
113:07:04.531 -> 1 213:07:04.531 -> 1 313:07:04.531 -> 1 413:07:04.531 -> 1 513:07:04.531 -> 1 613:07:04.531 -> 1 713:07:04.531 -> 1 813:07:04.531 -> 1 913:07:04.531 -> 1 1013:07:04.565 -> 1 1113:07:04.565 -> 1 1213:07:04.565 -> 1 1313:07:04.565 -> 1 1413:07:04.565 -> 1 1513:07:04.565 -> 1 1613:07:04.565 -> 1
SONAR::initをコメント化解除したときのシリアルモニタ
Arduino
113:07:33.031 -> D⸮bD⸮bD⸮bD⸮ D⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDCbD⸮D⸮bD⸮jD⸮b:⸮ 213:07:33.094 -> D⸮bD⸮bD⸮b4⸮bD⸮D⸮"D⸮bD⸮bDbD⸮bD⸮bD⸮bD⸮bD⸮b<⸮bD⸮bD⸮bD[bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮ 313:07:33.163 -> D⸮bD⸮bD⸮bD⸮bD⸮D⸮b⸮bD⸮bD⸮bD⸮bD⸮bD⸮D⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDCbD⸮b$⸮bD⸮bD[bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮ 413:07:33.266 -> D⸮bD⸮b<⸮bD⸮bD⸮b:⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮D⸮bD⸮bD⸮bD[bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮b<⸮bD⸮bD⸮ D⸮bD⸮bD⸮bD⸮b$⸮bD⸮D⸮b8⸮b8⸮bD⸮bD⸮bD⸮1"XbD⸮b⸮1"X"D⸮b$⸮bD⸮bD[bDYbDCbD⸮1"@1"XbD⸮bD⸮bD⸮b:⸮bD⸮ D⸮*D⸮bD⸮bD⸮ 513:07:33.440 -> D⸮bD⸮bD⸮bD⸮bD⸮bD⸮bt⸮bD⸮bD⸮bD⸮b<⸮D⸮bDSbD⸮bD⸮bD⸮b"XbD⸮bD⸮1"XbD⸮bD⸮bD⸮bD⸮D⸮bD⸮bD[bD⸮bD⸮ D⸮1"XbD⸮b4⸮bD⸮bD⸮b4⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDbD⸮bD⸮D⸮bD⸮b⸮bD⸮bD[bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD[bDXbD⸮bD⸮b:⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮ 613:07:33.647 -> D⸮bD⸮bD⸮b:⸮bD⸮1"XbD⸮bDXbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮ D⸮D⸮bD⸮bD⸮bD⸮b4⸮bD⸮bD⸮bD⸮ 713:07:33.750 -> D⸮bD⸮bD⸮D⸮bD⸮bD⸮bD⸮bDSbD[bD[bD⸮bD⸮bD⸮bD⸮ D⸮b8⸮bD⸮b:⸮"D⸮bD⸮b<⸮b<⸮b<⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDXbD⸮bDbD⸮b⸮bD⸮bD⸮b4⸮bD⸮b$⸮bD⸮bDbDYb4⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮ D⸮bDCD⸮bD⸮b⸮bD⸮ 813:07:33.923 -> D⸮D⸮ D⸮bD⸮bD⸮D⸮b\⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDSbD⸮bD⸮b$⸮b<⸮b<⸮bD⸮bD⸮bD⸮bD⸮b8⸮bD⸮ D⸮bD⸮b⸮bD⸮bD⸮bD⸮bDXbDXbD⸮bD⸮bD[bD⸮bD⸮bd[bD⸮bD⸮bD⸮bD⸮bD⸮b:⸮bD⸮bD⸮bD⸮D⸮bD⸮bDYbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮b4⸮bD⸮bD⸮bD⸮bD⸮"D⸮bDSbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDCbDCbDCbD⸮bD⸮ D⸮bDYbDSbD⸮bD[bD⸮bD⸮1"X1"X1"X"D⸮bD⸮b8⸮1"X 913:07:34.198 -> D⸮bD⸮bD⸮D⸮bD⸮bD⸮b$⸮ 1013:07:34.233 -> D⸮bD⸮bD⸮bD⸮bD⸮bD⸮b4⸮bD⸮bD⸮D⸮ 1113:07:34.268 -> D⸮bD⸮bD⸮ 1213:07:34.268 -> DCbD⸮b4⸮bD⸮bD⸮bD⸮bD⸮bD[bD⸮bD⸮bD⸮bD[bD⸮bFCbD⸮D⸮bD⸮bD⸮bD⸮bD⸮bD⸮D⸮bD⸮"D⸮bD⸮bD⸮bD⸮bD⸮bD⸮ 1313:07:34.371 -> D⸮D⸮D⸮bD⸮bDCbD[bD[bD⸮bD⸮bD⸮bDYbD⸮bD⸮bD⸮bDCbD⸮D⸮bD⸮bD⸮bDSbDCbDbD⸮bD⸮bD⸮bD⸮bD⸮bDYbD⸮bDXbDXbD⸮bD[bD⸮bD⸮b"XbD⸮bD⸮bD⸮bD[bD⸮bD⸮bD⸮bD⸮"D⸮b<⸮bD⸮bD⸮b"XbD⸮bD⸮bD⸮b:⸮bD⸮bD⸮b<⸮b:⸮bD[bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮D⸮bD⸮bDXbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮"D⸮b"Xb4⸮bD⸮bD⸮bDYbD⸮bD⸮bD⸮bD⸮bD⸮bD[bD⸮b:⸮bD⸮bD⸮bD⸮bD⸮b:⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDXbD⸮bD⸮ 1413:07:34.682 -> D⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDXbD⸮bD⸮bD⸮bD⸮b$⸮bD[bD⸮bD⸮bD[bD⸮ D⸮bD⸮bD⸮bD⸮b:⸮b:⸮bD⸮bD[bD⸮bD⸮bD⸮bDYbD⸮ 1513:07:34.786 -> D⸮bD⸮bD⸮bD⸮bD⸮"D⸮bD⸮bD⸮bD⸮D⸮ D⸮b⸮bD⸮ D⸮bD⸮ 1613:07:34.821 -> D⸮bDYbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDSbD⸮bD⸮b"XbD⸮bD⸮b:⸮bD⸮b<⸮bD⸮bD⸮b:⸮bD⸮bD[bD⸮ 1713:07:34.890 -> DbDCbD⸮D⸮b⸮⸮1"XbD⸮bDCbD⸮bDCbDYbD[bD⸮bD⸮bD⸮ D⸮bD⸮bDCbD[bD⸮bD⸮bD⸮b$⸮bD⸮bD⸮bDXbD⸮cD⸮bD⸮bD⸮bD[bDSbD⸮bD⸮bD⸮bD⸮D⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮1"XbD⸮bD⸮D⸮ 1813:07:35.060 -> D⸮D⸮D⸮bD⸮bDXbD⸮bD⸮bD⸮bD⸮bD[bD⸮bD⸮bD⸮bD⸮bD⸮ 1913:07:35.095 -> D⸮bD⸮bD⸮bD⸮bD[bDYbD⸮bDXbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮D⸮bD⸮bD⸮bD[bD⸮ 2013:07:35.197 -> DCbD⸮bDYbD⸮bD⸮bD⸮bD⸮D⸮bD[bDbD⸮bD⸮bD⸮bDXbDCbD⸮bD⸮bD⸮b<⸮b<⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮b"X⸮⸮1"X1⸮⸮'⸮⸮1"XbD⸮bD⸮bD⸮bDCbD⸮bD⸮bD[bD⸮b⸮b<⸮bD⸮b$⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDSbD⸮bD⸮ 2113:07:35.370 -> D⸮bD⸮bD⸮bD⸮bD⸮bD⸮bD⸮ D⸮1"X1"X 2213:07:35.370 -> D⸮bD⸮b:⸮bD⸮bD⸮bDSbD⸮bD⸮bD[bD⸮bDYbD⸮bD⸮bD⸮bDXbD⸮bD⸮b:⸮bD⸮bDYbDYbD[bD⸮bD⸮bD⸮ 2313:07:35.474 -> D⸮ 2413:07:35.474 -> D⸮D⸮b:⸮"DbD⸮bD⸮bD⸮bD⸮ 2513:07:35.508 -> D⸮1"XbD⸮bD⸮bD⸮bDXbD⸮bD⸮D⸮ 2613:07:35.542 -> D⸮bD⸮b$⸮b:⸮bD⸮bD⸮bD⸮bD⸮b$⸮bD⸮b<⸮b4⸮bD⸮bD⸮b$⸮bD⸮bD⸮bDCbD⸮bD⸮bD⸮b4⸮bD⸮bD⸮bD⸮bD⸮bD⸮b4⸮bD⸮1"XbD⸮bD⸮bDSbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDYbDSbDXbD⸮b:⸮ 2713:07:35.647 -> D⸮bD⸮bD⸮b<⸮bD⸮bD⸮bD⸮D⸮1"XbD⸮ DCbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮bDCbD⸮bD⸮bD⸮bD⸮bD⸮bD⸮D⸮ D⸮bD⸮b:⸮bD⸮c$⸮bD⸮bD⸮bD⸮bD[bD⸮cD⸮bD⸮b4⸮bD⸮bD⸮ 2813:07:35.785 -> D⸮"D⸮
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 08:40